package co.edu.usbcali.rebio.presentation.backEndBeans;

import co.edu.usbcali.rebio.exceptions.*;
import co.edu.usbcali.rebio.modelo.*;
import co.edu.usbcali.rebio.modelo.dto.RebSuerteDTO;
import co.edu.usbcali.rebio.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.rebio.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlDataTable;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlOutputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;
import com.sun.org.apache.xml.internal.serializer.ToUnknownStream;

import java.math.BigDecimal;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;


/**
 *
 *
 * @author Zathura Code Generator http://code.google.com/p/zathura
 *
 */
public class RebSuerteView extends DataSource implements Renderable,
DisposableBean {
	private HtmlInputText txtSurArea;
	private HtmlInputText txtSurEstado;
	private HtmlInputText txtSurNombre;
	private HtmlInputText txtSurZafra;
	private HtmlInputText txtHadId_RebHacienda;
	private HtmlInputText txtVdcCodigo_RebVariedadDeCana;
	private HtmlInputText txtSurCodigo = new HtmlInputText();
	private HtmlOutputText txtSurId;
	private HtmlInputText txtNombreHacienda;
	private HtmlInputText txtNombreVDC;
	private SelectInputDate txtSurFechadecorte;
	private HtmlInputText txtSurFecha;
	private HtmlSelectOneMenu cmbSurVdc;
	private HtmlSelectOneMenu cmbSurTratamiento;
	private HtmlSelectOneMenu cmbSurEstado;
	private HtmlSelectOneMenu cmbHacienda;
	private HtmlCommandButton btnSave;
	private HtmlCommandButton btnModify;
	private HtmlCommandButton btnDelete;
	private HtmlCommandButton btnEliminar;
	private HtmlCommandButton btnClear;
	private HtmlDataTable tablaHacienda = new HtmlDataTable();
	private HtmlDataTable tablaVDC = new HtmlDataTable();
	private HtmlCommandButton btnLupa;
	private HtmlCommandButton btnLupaVDC;
	private boolean renderDataTable;
	private boolean flag = true;
	private HtmlCommandButton btnAceptar;
	private boolean btnErrorf = false;
	private boolean btnhacienda = false;
	private boolean btnVDC = false;
	private RenderManager renderManager;
	private PersistentFacesState state = PersistentFacesState.getInstance();
	private List<RebSuerte> rebSuerte;
	private List<RebSuerteDTO> rebSuerteDTO;
	private List<SelectItem> listEstado = new ArrayList<SelectItem>();
	private List<SelectItem> listVdc = new ArrayList<SelectItem>();
	private List<SelectItem> listTratamientos = new ArrayList<SelectItem>();
	private List<SelectItem> listHAciendas = new ArrayList<SelectItem>();
	private List<RebHacienda> lasHaciendas = new ArrayList<RebHacienda>();
	private List<RebVariedadDeCana> lasVDC = new ArrayList<RebVariedadDeCana>();
	private String codigoHad;
	private String codigoVDC;

	public RebSuerteView() {
		super("");
	}
	
	public String action_Cargar2() throws Exception {
    	String codigoHacienda = txtSurCodigo.getValue().toString();
    	try {
			RebHacienda hacienda = BusinessDelegatorView.getRebHacienda(Integer.parseInt(codigoHacienda));
			txtHadId_RebHacienda.setValue(hacienda.getHadNombre());
			codigoHad = hacienda.getHadId().toString();
			btnhacienda = false;
			
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return "";
    }
	
	public String action_CargarVDC() throws Exception {
    	String codigoVdc = txtSurId.getValue().toString();
    	try {
			RebVariedadDeCana VDC = BusinessDelegatorView.getRebVariedadDeCana(Integer.parseInt(codigoVdc));
			txtVdcCodigo_RebVariedadDeCana.setValue(VDC.getVdcNombre());
			codigoVDC = VDC.getVdcCodigo().toString();
			btnVDC = false;
			
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return "";
    }
	
	public String action_abrir() {
		btnhacienda = true;
		return "";
	}
	public String action_abrirVDC() {
		btnVDC = true;
		return "";
	}
    
    public String action_cerrar() {
		btnhacienda = false;
		return "";
	}	
    public String action_cerrarVDC() {
		btnVDC = false;
		return "";
	}	

	public String action_clear() {
		txtSurArea.setValue(null);
		txtSurArea.setDisabled(false);
		cmbSurEstado.setValue(null);
		cmbSurEstado.setDisabled(false);
		txtSurNombre.setValue(null);
		txtSurNombre.setDisabled(false);
		txtSurZafra.setValue(null);
		txtSurZafra.setDisabled(false);
		txtHadId_RebHacienda.setValue(null);
		txtHadId_RebHacienda.setDisabled(false);
//		cmbHacienda.setValue(null);
//		cmbHacienda.setDisabled(false);
		txtVdcCodigo_RebVariedadDeCana.setValue(null);
		txtVdcCodigo_RebVariedadDeCana.setDisabled(false);
		txtSurFecha.setValue(null);
		txtSurFecha.setDisabled(false);
		txtSurCodigo.setValue(null);
		txtSurCodigo.setDisabled(true);
		cmbSurTratamiento.setValue("0");
		cmbSurTratamiento.setDisabled(false);
		btnLupa.setDisabled(false);
		btnLupaVDC.setDisabled(false);
		btnSave.setDisabled(false);
		btnDelete.setDisabled(true);
		btnEliminar.setDisabled(true);
		btnModify.setDisabled(true);
		btnClear.setDisabled(false);
		codigoHad = null;
		codigoVDC = null;

		return "";
	}
	
	 public String action_consultarHacienda() {
			try {

				String nombreHacienda = txtNombreHacienda.getValue().toString().toUpperCase();
				if (nombreHacienda == null || nombreHacienda == "") {
					lasHaciendas = BusinessDelegatorView.findByCriteriaInRebHacienda(null,null,null,true);
				} else {
					Object variables[] = {"hadNombre",true,nombreHacienda + '%',"Like"};
					lasHaciendas = BusinessDelegatorView.findByCriteriaInRebHacienda(variables, null, null,true);
					//System.out.println("Aqui");
				}
				flag = true;
				renderManager.getOnDemandRenderer("rebSuerteView")
				.requestRender();

			} catch (Exception e) {
				// TODO: handle exception
			}

			return "";
		}
	 
	 public String action_consultarVDC() {
			try {

				String nombreVDC = txtNombreVDC.getValue().toString().toUpperCase();
				if (nombreVDC == null || nombreVDC == "") {
					lasVDC = BusinessDelegatorView.findByCriteriaInRebVariedadDeCana(null,null,null,true);
				} else {
					Object variables[] = {"vdcNombre",true,nombreVDC + '%',"Like"};
					lasVDC = BusinessDelegatorView.findByCriteriaInRebVariedadDeCana(variables, null, null, true);
					//System.out.println("Aqui");
				}
				flag = true;
				renderManager.getOnDemandRenderer("rebSuerteView")
				.requestRender();

			} catch (Exception e) {
				// TODO: handle exception
			}

			return "";
		}


	public String action_cargar(String surCodigo) {
		RebSuerte entity = null;
		if (surCodigo != null) {
			
			try {
				int codigo = Integer.parseInt(surCodigo);
				entity = BusinessDelegatorView.getRebSuerte(codigo);
								
			} catch (Exception e) {
				// TODO: handle exception
			}

			if (entity == null) {
				txtSurArea.setDisabled(false);
				cmbSurEstado.setDisabled(false);
				txtSurNombre.setDisabled(false);
				txtSurZafra.setDisabled(false);
				txtHadId_RebHacienda.setDisabled(false);
//				cmbHacienda.setDisabled(false);
				txtVdcCodigo_RebVariedadDeCana.setDisabled(false);
				txtSurFecha.setDisabled(false);
				txtSurCodigo.setDisabled(false);
				cmbSurTratamiento.setDisabled(false);
				btnLupa.setDisabled(false);
				btnLupaVDC.setDisabled(false);
				btnSave.setDisabled(false);
				btnDelete.setDisabled(true);
				btnEliminar.setDisabled(true);
				btnModify.setDisabled(true);
				btnClear.setDisabled(false);
			} else {
				Object variables[] = { "rebSuerte.surCodigo", true,
						surCodigo, "=" };
				List<RebFechasTratamiento> entity2;
				try {
					entity2 = BusinessDelegatorView.findByCriteriaInRebFechasTratamiento(variables, null, null,"fetFecha");
					cmbSurTratamiento.setValue(entity2.get(0).getRebAgentesTratamiento().getRebTratamineto().getTraCodigo());
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				txtSurArea.setValue(entity.getSurArea());
				txtSurArea.setDisabled(false);
				cmbSurEstado.setValue(entity.getSurEstado());
				cmbSurEstado.setDisabled(false);
				if (entity.getSurFechadecorte()!=null){
					SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy");
					String date = s.format(entity.getSurFechadecorte());
					txtSurFecha.setValue(date);
				}else {
					txtSurFecha.setValue(null);
				}
				txtSurFecha.setDisabled(false);
				txtSurNombre.setValue(entity.getSurNombre());
				txtSurNombre.setDisabled(false);
				txtSurZafra.setValue(entity.getSurZafra());
				txtSurZafra.setDisabled(false);
//				cmbHacienda.setValue(entity.getRebHacienda().getHadId());
//				cmbHacienda.setDisabled(false);
				txtHadId_RebHacienda.setValue(entity.getRebHacienda().getHadNombre());
				txtHadId_RebHacienda.setDisabled(false);
				codigoHad = entity.getRebHacienda().getHadId().toString();
				txtVdcCodigo_RebVariedadDeCana.setValue(entity.getRebVariedadDeCana()
						.getVdcNombre());
				txtVdcCodigo_RebVariedadDeCana.setDisabled(false);
				codigoVDC = entity.getRebVariedadDeCana().getVdcCodigo().toString();
				txtSurCodigo.setValue(entity.getSurCodigo());
				txtSurCodigo.setDisabled(true);
				
				cmbSurTratamiento.setDisabled(false);
				btnLupa.setDisabled(false);
				btnLupaVDC.setDisabled(false);
				btnSave.setDisabled(true);
				btnDelete.setDisabled(false);
				btnEliminar.setDisabled(false);
				btnModify.setDisabled(false);
				btnClear.setDisabled(false);
			}
		}
		return("");
	}
	
	public void listener_txtId(ValueChangeEvent event) {
		if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
			RebSuerte entity = null;

			try {
				Integer surCodigo = new Integer(txtSurCodigo.getValue()
						.toString());
				entity = BusinessDelegatorView.getRebSuerte(surCodigo);
			} catch (Exception e) {
				// TODO: handle exception
			}

			if (entity == null) {
				txtSurArea.setDisabled(false);
				cmbSurEstado.setDisabled(false);
				txtSurNombre.setDisabled(false);
				txtSurZafra.setDisabled(false);
				txtHadId_RebHacienda.setDisabled(false);
//				cmbHacienda.setDisabled(false);
				txtVdcCodigo_RebVariedadDeCana.setDisabled(false);
				txtSurFecha.setDisabled(false);
				txtSurCodigo.setDisabled(false);
				cmbSurTratamiento.setDisabled(false);
				btnLupa.setDisabled(false);
				btnLupaVDC.setDisabled(false);
				btnSave.setDisabled(false);
				btnDelete.setDisabled(true);
				btnEliminar.setDisabled(true);
				btnModify.setDisabled(true);
				btnClear.setDisabled(false);
			} else {
				Object variables[] = { "rebSuerte.surCodigo", true,
						entity.getSurCodigo(), "=" };
				List<RebFechasTratamiento> entity2;
				try {
					entity2 = BusinessDelegatorView.findByCriteriaInRebFechasTratamiento(variables, null, null,"fetFecha");
					cmbSurTratamiento.setValue(entity2.get(1).getRebAgentesTratamiento().getAgtCodigo());
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				txtSurArea.setValue(entity.getSurArea());
				txtSurArea.setDisabled(false);
				cmbSurEstado.setValue(entity.getSurEstado());
				cmbSurEstado.setDisabled(false);
//				cmbHacienda.setValue(entity.getRebHacienda().getHadId());
//				cmbHacienda.setDisabled(false);
				txtSurFecha.setValue(entity.getSurFechadecorte());
				txtSurFecha.setDisabled(false);
				txtSurNombre.setValue(entity.getSurNombre());
				txtSurNombre.setDisabled(false);
				txtSurZafra.setValue(entity.getSurZafra());
				txtSurZafra.setDisabled(false);
				txtHadId_RebHacienda.setValue(entity.getRebHacienda().getHadNombre());
				codigoHad = entity.getRebHacienda().getHadId().toString();
				txtHadId_RebHacienda.setDisabled(false);
				txtVdcCodigo_RebVariedadDeCana.setValue(entity.getRebVariedadDeCana()
						.getVdcCodigo());
				txtVdcCodigo_RebVariedadDeCana.setDisabled(false);
				codigoVDC = entity.getRebVariedadDeCana().getVdcCodigo().toString();
				txtSurCodigo.setValue(entity.getSurCodigo());
				txtSurCodigo.setDisabled(true);
				
				cmbSurTratamiento.setDisabled(false);
				btnLupa.setDisabled(false);
				btnLupaVDC.setDisabled(false);
				btnSave.setDisabled(true);
				btnDelete.setDisabled(false);
				btnEliminar.setDisabled(false);
				btnModify.setDisabled(false);
				btnClear.setDisabled(false);
			}
		}
	}
	
	public String action_cerrar2(){
		btnErrorf = false;
		return "";
	}

	public String action_save() {
		try {
			String estado = cmbSurEstado.getValue().toString();
			//String id = txtSurCodigo.getValue().toString();
			String nombre = txtSurNombre.getValue().toString().toUpperCase();
			String area = txtSurArea.getValue().toString();
			SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaDate = null;
			String fecha = txtSurFecha.getValue().toString();
			if(!fecha.isEmpty() && fecha != null){
				fechaDate = s.parse(fecha);
				//throw new Exception("La fecha  no esta en el formato establecido dd/mm/aaaa");
			}
			String zafra = "";
			if (txtSurZafra.getValue().equals("")) {
        		zafra = "0";
			}else {
				zafra = txtSurZafra.getValue().toString();
			}
			String hacienda = "";
			String vdc = "";
			if (codigoHad != null){
				hacienda = codigoHad;
			}
			if (codigoVDC != null) {
				vdc = codigoVDC;
			}else {
				vdc = "0";
			}
			String tratamiento = cmbSurTratamiento.getValue().toString();
			
			if(!Utilities.soloNumberLetras(nombre)){
				throw new Exception("El Nombre de la Suerte debe contener solo letras");
			}
        	if(nombre.trim().equals("")){
				throw new Exception("El Nombre de la Suerte es de car&#225;cter obligatorio");
			}
        	if (hacienda.trim().equals("") || hacienda.equals("0")) {
				throw new Exception("La Hacienda es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
        	char are[] = area.toCharArray();
        	for (char string : are) {
        		if (!Utilities.soloNumeros(string+"") && string != (".").charAt(0)) {
    				throw new Exception("El area de la Suerte debe ser totalmente numerico");
    				
    			}
			}
        	
			if (area.trim().equals("")) {
				throw new Exception("El area de la Suerte es de caracter obligatorio");
			}
			if (!Utilities.soloNumeros(zafra)) {
				throw new Exception("La Zafra de la Suerte debe ser totalmente numerico");
			}
			
			if(fecha.trim().equals("") || fecha.trim().equals(null)){
				
			}else{
				
				if(!Utilities.soloNumerosySigno(fecha)){
					throw new Exception("La fecha  no esta en el formato establecido dd/mm/aaaa");
				}
				if(!Utilities.verificarDias(fecha)){
					throw new Exception("El dia de la fecha de corte esta mal digitada");
				}
				if(!Utilities.verificarMeses(fecha)){
					throw new Exception("El mes de la fecha de corte esta mal digitada");
				}
			}
		
			
			/*if (zafra.trim().equals("")) {
				throw new Exception("La Zafra de la Suerte es de caracter obligatorio");
			}
			if (vdc.trim().equals("")) {
				throw new Exception("La Variedad de Ca&#241;a de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
			if (fecha.equals("")) {
				throw new Exception("La Fecha de Corte de la Suerte es de caracter obligatorio");
			}
			if (!Utilities.soloNumerosySigno(fecha)) {
				throw new Exception("La fecha de corte de la Suerte debe estar en el formato establecido dd/MM/yyyy");
			}*/
			/*if (tratamiento.trim().equals("") || tratamiento.equals("0")) {
				throw new Exception("El Tratamiento de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}*/
			if (estado.trim().equals("") || estado.equals("Seleccione un valor")) {
				throw new Exception("El Estado de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}

			BusinessDelegatorView.saveRebSuerte( new Double(area), null,
					estado, fechaDate, nombre, new Integer(zafra),
					new Integer(hacienda),  new Integer(vdc), new Integer(tratamiento));
			btnErrorf = true;
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			
			onePageDataModel = null;
			renderManager.getOnDemandRenderer("rebSuerteView").requestRender();
			
			action_clear();
		} catch (Exception e) {
			btnErrorf = true;
			btnAceptar.requestFocus();
			FacesUtils.addErrorMessage(e.getMessage());
		}
		return "";
	}

	public String action_delete() {
		try {
			String id = txtSurCodigo.getValue().toString();
			BusinessDelegatorView.deleteRebSuerte(new Integer(id));
			
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			onePageDataModel = null;
			renderManager.getOnDemandRenderer("rebSuerteView").requestRender();
			action_clear();
		} catch (Exception e) {
			btnErrorf = true;
			btnAceptar.requestFocus();
			FacesUtils.addErrorMessage(e.getMessage());
		}
		btnErrorf = true;
		return "";
	}

	public String action_Inactivar() {
		try {
			String estado = "INACTIVO";
			//String estado = cmbSurEstado.getValue().toString();
			String id = txtSurCodigo.getValue().toString();
			String nombre = txtSurNombre.getValue().toString().toUpperCase();
			String area = txtSurArea.getValue().toString();
			SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaDate = null;
			String fecha = txtSurFecha.getValue().toString();
			if(!fecha.isEmpty() && fecha != null){
				fechaDate = s.parse(fecha);
			}
			String zafra = "";
			if (txtSurZafra.getValue().equals("")) {
        		zafra = "0";
			}else {
				zafra = txtSurZafra.getValue().toString();
			}
			String hacienda = "";
			String vdc = "";
			if (codigoHad != null){
				hacienda = codigoHad;
			}
			if (codigoVDC != null) {
				vdc = codigoVDC;
			}else {
				vdc = "0";
			}
			String tratamiento = cmbSurTratamiento.getValue().toString();
			
			if(!Utilities.soloNumberLetras(nombre)){
				throw new Exception("El Nombre de la Suerte debe contener solo letras");
			}
        	if(nombre.trim().equals("")){
				throw new Exception("El Nombre de la Suerte es de car&#225;cter obligatorio");
			}
        	if (hacienda.trim().equals("")) {
				throw new Exception("La Hacienda es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
        	if (Utilities.soloLetras(area)) {
				throw new Exception("El area de la Suerte debe ser totalmente numerico");
			}
			if (area.trim().equals("")) {
				throw new Exception("El area de la Suerte es de caracter obligatorio");
			}
			if (!Utilities.soloNumeros(zafra)) {
				throw new Exception("La Zafra de la Suerte debe ser totalmente numerico");
			}
			if (zafra.trim().equals("")) {
				throw new Exception("La Zafra de la Suerte es de caracter obligatorio");
			}
			if (vdc.trim().equals("")) {
				throw new Exception("La Variedad de Ca&#241;a de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
			/*if (fecha.equals("")) {
				throw new Exception("La Fecha de Corte de la Suerte es de caracter obligatorio");
			}
			if (tratamiento.trim().equals("") || tratamiento.equals("0")) {
				throw new Exception("El Tratamiento de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
			if (estado.trim().equals("") || estado.equals("Seleccione un valor")) {
				throw new Exception("El Estado de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
			if (!Utilities.soloNumerosySigno(fecha)) {
				throw new Exception("La fecha de corte de la Suerte debe estar en el formato establecido dd/MM/yyyy");
			}*/

			BusinessDelegatorView.updateRebSuerte( new Double(area), new Integer(id),
					estado, fechaDate,
					nombre, new Integer(zafra), new Integer(hacienda),
					new Integer(vdc), new Integer(tratamiento));
			
			/*BusinessDelegatorView.updateRebFechasTratamiento(null, estado, null, 
					new Integer(tratamiento), new Integer(id));*/

			btnErrorf = true;
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
			
			onePageDataModel = null;
			renderManager.getOnDemandRenderer("rebSuerteView").requestRender();
			
			action_clear();
		} catch (Exception e) {
			btnErrorf = true;
			btnAceptar.requestFocus();
			FacesUtils.addErrorMessage(e.getMessage());
			
		}

		return "";
	}

	public String action_modify() {
		try {
			//String estado = "Activo";
			String estado = cmbSurEstado.getValue().toString();
			String id = txtSurCodigo.getValue().toString();
			String nombre = txtSurNombre.getValue().toString().toUpperCase();
			String area = txtSurArea.getValue().toString();
			SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaDate = null;
			String fecha = txtSurFecha.getValue().toString();
			if(!fecha.isEmpty() && fecha != null){
				fechaDate = s.parse(fecha);
			}
			String zafra = "";
			if (txtSurZafra.getValue().equals("")) {
        		zafra = "0";
			}else {
				zafra = txtSurZafra.getValue().toString();
			}
			String hacienda = "";
			String vdc = "";
			if (codigoHad != null){
				hacienda = codigoHad;
			}
			if (codigoVDC != null) {
				vdc = codigoVDC;
			}else {
				vdc = "0";
			}
			String tratamiento = cmbSurTratamiento.getValue().toString();
			
			if(!Utilities.soloNumberLetras(nombre)){
				throw new Exception("El Nombre de la Suerte debe contener solo letras");
			}
        	if(nombre.trim().equals("")){
				throw new Exception("El Nombre de la Suerte es de car&#225;cter obligatorio");
			}
        	if (hacienda.trim().equals("")) {
        		throw new Exception("La Hacienda es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
        	if (Utilities.soloLetras(area)) {
				throw new Exception("El area de la Suerte debe ser totalmente numerico");
			}
			if (area.trim().equals("")) {
				throw new Exception("El area de la Suerte es de caracter obligatorio");
			}
			if (!Utilities.soloNumeros(zafra)) {
				throw new Exception("La Zafra de la Suerte debe ser totalmente numerico");
			}
			if (zafra.trim().equals("")) {
				throw new Exception("La Zafra de la Suerte es de caracter obligatorio");
			}
			if (vdc.trim().equals("")) {
				throw new Exception("La Variedad de Ca&#241;a de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
			/*if (fecha.equals("")) {
				throw new Exception("La Fecha de Corte de la Suerte es de caracter obligatorio");
			}
			if (tratamiento.trim().equals("") || tratamiento.equals("0")) {
				throw new Exception("El Tratamiento de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
			if (!Utilities.soloNumerosySigno(fecha)) {
				throw new Exception("La fecha de corte de la Suerte debe estar en el formato establecido dd/MM/yyyy");
			}*/
			if (estado.trim().equals("") || estado.equals("Seleccione un valor")) {
				throw new Exception("El Estado de la Suerte es de car&#225;cter obligatorio, debes seleccionar alguno");
			}
			

			BusinessDelegatorView.updateRebSuerte(new Double(area), new Integer(id),
					estado, fechaDate,
					nombre, new Integer(zafra), new Integer(hacienda),
					new Integer(vdc), new Integer(tratamiento));
			
			btnErrorf = true;
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
			
			onePageDataModel = null;
			renderManager.getOnDemandRenderer("rebSuerteView").requestRender();
			
			action_clear();
		} catch (Exception e) {
			btnErrorf = true;
			btnAceptar.requestFocus();
			FacesUtils.addErrorMessage(e.getMessage());
			
		}

		return "";
	}

	public String action_modifyWitDTO(Double surArea, Integer surCodigo,
			String surEstado, Date surFechadecorte, String surNombre,
			Integer surZafra, Integer hadId_RebHacienda,
			Integer vdcCodigo_RebVariedadDeCana) throws Exception {
		try {
//			BusinessDelegatorView.updateRebSuerte(surArea, surCodigo,
//					surEstado, surFechadecorte, surNombre, surZafra,
//					hadId_RebHacienda, vdcCodigo_RebVariedadDeCana);
//			renderManager.getOnDemandRenderer("RebSuerteView").requestRender();
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			//renderManager.getOnDemandRenderer("RebSuerteView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public List<RebSuerte> getRebSuerte() {
		if (flag) {
			try {
				rebSuerte = BusinessDelegatorView.getRebSuerte();
				flag = false;
			} catch (Exception e) {
				flag = true;
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}

		return rebSuerte;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setRebSuerte(List<RebSuerte> rebSuerte) {
		this.rebSuerte = rebSuerte;
	}

	public boolean isRenderDataTable() {
		try {
			if (flag) {
				if (BusinessDelegatorView.findTotalNumberRebSuerte() > 0) {
					renderDataTable = true;
				} else {
					renderDataTable = false;
				}
			}

			flag = false;
		} catch (Exception e) {
			renderDataTable = false;
			e.printStackTrace();
		}

		return renderDataTable;
	}

	public DataModel getData() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModel(pageSize);
		}
		renderManager.getOnDemandRenderer("rebSuerteView").requestRender();

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and
	 * returned as a list of objects for display in the UI.
	 */
	private DataPage<RebSuerte> getDataPage(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database.  This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberRebSuerte = 0;

		try {
			totalNumberRebSuerte = BusinessDelegatorView.findTotalNumberRebSuerte()
			.intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberRebSuerte) {
			endIndex = totalNumberRebSuerte;
		}

		try {
			rebSuerte = BusinessDelegatorView.findPageRebSuerte(sortColumnName,
					sortAscending, startRow, endIndex - startRow);

			// Remove this Renderable from the existing render groups.
			//leaveRenderGroups();        			
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		//joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate.  If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<RebSuerte>(totalNumberRebSuerte, startRow, rebSuerte);
	}

	public DataModel getDataDTO() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModelDTO(pageSize);
		}
		renderManager.getOnDemandRenderer("rebSuerteView").requestRender();

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and
	 * returned as a list of objects for display in the UI.
	 */
	private DataPage<RebSuerteDTO> getDataPageDTO(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database.  This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberRebSuerte = 0;

		try {
			totalNumberRebSuerte = BusinessDelegatorView.findTotalNumberRebSuerte()
			.intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberRebSuerte) {
			endIndex = totalNumberRebSuerte;
		}

		try {
			rebSuerte = BusinessDelegatorView.findPageRebSuerte(sortColumnName,
					sortAscending, startRow, endIndex - startRow);

			if (Utilities.validationsList(rebSuerte)) {
				rebSuerteDTO = new ArrayList<RebSuerteDTO>();
				
				for (RebSuerte rebSuerteTmp : rebSuerte) {
					
					RebSuerteDTO rebSuerteDTO2 = new RebSuerteDTO();
					Object variables[] = { "rebSuerte.surCodigo", true,
							rebSuerteTmp.getSurCodigo(), "=" };
					List<RebFechasTratamiento> entity2;
					try {
						entity2 = BusinessDelegatorView.findByCriteriaInRebFechasTratamiento(variables, null, null,"fetFecha");
						rebSuerteDTO2.setSurTratamient(entity2.get(0) != null ? entity2.get(0).getRebAgentesTratamiento().getRebTratamineto().getTraNombre().toString()
								: null);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					rebSuerteDTO2.setSurCodigo(rebSuerteTmp.getSurCodigo()
							.toString());
					rebSuerteDTO2.setSurArea((rebSuerteTmp.getSurArea() != null)
							? rebSuerteTmp.getSurArea().toString() : null);
					rebSuerteDTO2.setSurEstado((rebSuerteTmp.getSurEstado() != null)
							? rebSuerteTmp.getSurEstado().toString() : null);
					rebSuerteDTO2.setSurFechadecorte(rebSuerteTmp.getSurFechadecorte());
					rebSuerteDTO2.setSurNombre((rebSuerteTmp.getSurNombre() != null)
							? rebSuerteTmp.getSurNombre().toString() : null);
					rebSuerteDTO2.setSurZafra((rebSuerteTmp.getSurZafra() != null)
							? rebSuerteTmp.getSurZafra().toString() : null);
					rebSuerteDTO2.setHadId_RebHacienda((rebSuerteTmp.getRebHacienda()
							.getHadNombre() != null)
							? rebSuerteTmp.getRebHacienda().getHadNombre().toString()
									: null);
					rebSuerteDTO2.setVdcCodigo_RebVariedadDeCana((rebSuerteTmp.getRebVariedadDeCana()
							.getVdcNombre() != null)
							? rebSuerteTmp.getRebVariedadDeCana().getVdcNombre()
									.toString() : null);
					
					
					rebSuerteDTO2.setRebSuerte(rebSuerteTmp);
					rebSuerteDTO2.setRebSuerteView(this);
					rebSuerteDTO.add(rebSuerteDTO2);
				}
			}

			// Remove this Renderable from the existing render groups.
			leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate.  If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<RebSuerteDTO>(totalNumberRebSuerte, startRow,
				rebSuerteDTO);
	}

	protected boolean isDefaultAscending(String sortColumn) {
		return true;
	}

	/**
	 * This method is called when a render call is made from the server. Render
	 * calls are only made to views containing an updated record. The data is
	 * marked as dirty to trigger a fetch of the updated record from the
	 * database before rendering takes place.
	 */
	public PersistentFacesState getState() {
		onePageDataModel.setDirtyData();

		return state;
	}

	/**
	 * This method is called from faces-config.xml with each new session.
	 */
	public void setRenderManager(RenderManager renderManager) {
		this.renderManager = renderManager;
	}

	public void renderingException(RenderingException arg0) {
		if (arg0 instanceof TransientRenderingException) {
		} else if (arg0 instanceof FatalRenderingException) {
			// Remove from existing Customer render groups.
			leaveRenderGroups();
		}
	}

	/**
	 * Remove this Renderable from existing uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void leaveRenderGroups() {
		if (Utilities.validationsList(rebSuerteDTO)) {
			for (RebSuerteDTO rebSuerteTmp : rebSuerteDTO) {
				renderManager.getOnDemandRenderer("RebSuerteView").remove(this);
			}
		}
	}

	/**
	 * Add this Renderable to the new uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void joinRenderGroups() {
		if (Utilities.validationsList(rebSuerteDTO)) {
			for (RebSuerteDTO rebSuerteTmp : rebSuerteDTO) {
				renderManager.getOnDemandRenderer("RebSuerteView").add(this);
			}
		}
	}

	public void dispose() throws Exception {
	}

	public RenderManager getRenderManager() {
		return renderManager;
	}

	public void setState(PersistentFacesState state) {
		this.state = state;
	}

	public HtmlInputText getTxtSurArea() {
		return txtSurArea;
	}

	public void setTxtSurArea(HtmlInputText txtSurArea) {
		this.txtSurArea = txtSurArea;
	}

	public HtmlInputText getTxtSurEstado() {
		return txtSurEstado;
	}

	public void setTxtSurEstado(HtmlInputText txtSurEstado) {
		this.txtSurEstado = txtSurEstado;
	}

	public HtmlInputText getTxtSurNombre() {
		return txtSurNombre;
	}

	public void setTxtSurNombre(HtmlInputText txtSurNombre) {
		this.txtSurNombre = txtSurNombre;
	}

	public HtmlInputText getTxtSurZafra() {
		return txtSurZafra;
	}

	public void setTxtSurZafra(HtmlInputText txtSurZafra) {
		this.txtSurZafra = txtSurZafra;
	}

	public HtmlInputText getTxtHadId_RebHacienda() {
		return txtHadId_RebHacienda;
	}

	public void setTxtHadId_RebHacienda(HtmlInputText txtHadId_RebHacienda) {
		this.txtHadId_RebHacienda = txtHadId_RebHacienda;
	}

	public HtmlInputText getTxtVdcCodigo_RebVariedadDeCana() {
		return txtVdcCodigo_RebVariedadDeCana;
	}

	public void setTxtVdcCodigo_RebVariedadDeCana(
			HtmlInputText txtVdcCodigo_RebVariedadDeCana) {
		this.txtVdcCodigo_RebVariedadDeCana = txtVdcCodigo_RebVariedadDeCana;
	}

	public SelectInputDate getTxtSurFechadecorte() {
		return txtSurFechadecorte;
	}

	public void setTxtSurFechadecorte(SelectInputDate txtSurFechadecorte) {
		this.txtSurFechadecorte = txtSurFechadecorte;
	}

	public HtmlInputText getTxtSurFecha() {
		return txtSurFecha;
	}

	public void setTxtSurFecha(HtmlInputText txtSurFecha) {
		this.txtSurFecha = txtSurFecha;
	}

	public HtmlInputText getTxtSurCodigo() {
		return txtSurCodigo;
	}

	public void setTxtSurCodigo(HtmlInputText txtSurCodigo) {
		this.txtSurCodigo = txtSurCodigo;
	}

	public HtmlInputText getTxtNombreHacienda() {
		return txtNombreHacienda;
	}

	public void setTxtNombreHacienda(HtmlInputText txtNombreHacienda) {
		this.txtNombreHacienda = txtNombreHacienda;
	}

	public HtmlOutputText getTxtSurId() {
		return txtSurId;
	}

	public void setTxtSurId(HtmlOutputText txtSurId) {
		this.txtSurId = txtSurId;
	}

	public HtmlInputText getTxtNombreVDC() {
		return txtNombreVDC;
	}

	public void setTxtNombreVDC(HtmlInputText txtNombreVDC) {
		this.txtNombreVDC = txtNombreVDC;
	}

	public HtmlSelectOneMenu getCmbSurVdc() {
		try {
			List<RebVariedadDeCana> list = BusinessDelegatorView.findByCriteriaInRebVariedadDeCana(null, null, null,true);
			listVdc.clear();
			listVdc.add(new SelectItem(0,"Seleccione un valor"));

			for (RebVariedadDeCana vdc : list) {
				listVdc.add(new SelectItem(vdc.getVdcCodigo(), vdc.getVdcNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return cmbSurVdc;
	}

	public void setCmbSurVdc(HtmlSelectOneMenu cmbSurVdc) {
		this.cmbSurVdc = cmbSurVdc;
	}

	public HtmlSelectOneMenu getCmbSurTratamiento() {
		try {
			List<RebTratamineto> list = BusinessDelegatorView.findByCriteriaInRebTratamineto(null, null, null, true);
			listTratamientos.clear();
			listTratamientos.add(new SelectItem(0,"Seleccione un valor"));

			for (RebTratamineto tratamiento : list) {
				listTratamientos.add(new SelectItem(tratamiento.getTraCodigo(), tratamiento.getTraNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return cmbSurTratamiento;
	}

	public void setCmbSurTratamiento(HtmlSelectOneMenu cmbSurTratamiento) {
		this.cmbSurTratamiento = cmbSurTratamiento;
	}

	public HtmlSelectOneMenu getCmbSurEstado() {
		try {
			 listEstado.clear();
			 listEstado.add(new SelectItem("Seleccione un valor"));
			 listEstado.add(new SelectItem("ACTIVO"));
			 listEstado.add(new SelectItem("INACTIVO"));
		 } catch (Exception e) {
			 // TODO: handle exception
		 }
		return cmbSurEstado;
	}

	public void setCmbSurEstado(HtmlSelectOneMenu cmbSurEstado) {
		this.cmbSurEstado = cmbSurEstado;
	}

	public HtmlSelectOneMenu getCmbHacienda() {
		try {
			List<RebHacienda> list = BusinessDelegatorView.findByCriteriaInRebHacienda(null, null, null, true);
			listHAciendas.clear();
			listHAciendas.add(new SelectItem(0,"Seleccione un valor"));

			for (RebHacienda had : list) {
				listHAciendas.add(new SelectItem(had.getHadId(), had.getHadNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return cmbHacienda;
	}

	public void setCmbHacienda(HtmlSelectOneMenu cmbHacienda) {
		this.cmbHacienda = cmbHacienda;
	}

	public HtmlCommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(HtmlCommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public HtmlCommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(HtmlCommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public HtmlCommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(HtmlCommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public HtmlCommandButton getBtnEliminar() {
		return btnEliminar;
	}

	public void setBtnEliminar(HtmlCommandButton btnEliminar) {
		this.btnEliminar = btnEliminar;
	}

	public HtmlCommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(HtmlCommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public HtmlCommandButton getBtnLupa() {
		return btnLupa;
	}

	public void setBtnLupa(HtmlCommandButton btnLupa) {
		this.btnLupa = btnLupa;
	}

	public HtmlCommandButton getBtnLupaVDC() {
		return btnLupaVDC;
	}

	public void setBtnLupaVDC(HtmlCommandButton btnLupaVDC) {
		this.btnLupaVDC = btnLupaVDC;
	}

	public void setRenderDataTable(boolean renderDataTable) {
		this.renderDataTable = renderDataTable;
	}

	public boolean isBtnhacienda() {
		return btnhacienda;
	}

	public void setBtnhacienda(boolean btnhacienda) {
		this.btnhacienda = btnhacienda;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	
	

	public HtmlCommandButton getBtnAceptar() {
		return btnAceptar;
	}

	public void setBtnAceptar(HtmlCommandButton btnAceptar) {
		this.btnAceptar = btnAceptar;
	}

	public boolean isBtnErrorf() {
		return btnErrorf;
	}

	public void setBtnErrorf(boolean btnErrorf) {
		this.btnErrorf = btnErrorf;
	}

	public HtmlDataTable getTablaHacienda() {
		return tablaHacienda;
	}

	public void setTablaHacienda(HtmlDataTable tablaHacienda) {
		this.tablaHacienda = tablaHacienda;
	}

	public HtmlDataTable getTablaVDC() {
		return tablaVDC;
	}

	public void setTablaVDC(HtmlDataTable tablaVDC) {
		this.tablaVDC = tablaVDC;
	}

	public boolean isBtnVDC() {
		return btnVDC;
	}

	public void setBtnVDC(boolean btnVDC) {
		this.btnVDC = btnVDC;
	}

	public List<RebSuerteDTO> getRebSuerteDTO() {
		return rebSuerteDTO;
	}

	public void setRebSuerteDTO(List<RebSuerteDTO> rebSuerteDTO) {
		this.rebSuerteDTO = rebSuerteDTO;
	}

	public List<SelectItem> getListEstado() {
		return listEstado;
	}

	public void setListEstado(List<SelectItem> listEstado) {
		this.listEstado = listEstado;
	}

	public List<SelectItem> getListVdc() {
		return listVdc;
	}

	public void setListVdc(List<SelectItem> listVdc) {
		this.listVdc = listVdc;
	}

	public List<SelectItem> getListTratamientos() {
		return listTratamientos;
	}

	public void setListTratamientos(List<SelectItem> listTratamientos) {
		this.listTratamientos = listTratamientos;
	}

	public List<SelectItem> getListHAciendas() {
		return listHAciendas;
	}

	public void setListHAciendas(List<SelectItem> listHAciendas) {
		this.listHAciendas = listHAciendas;
	}

	public List<RebHacienda> getLasHaciendas() {
		return lasHaciendas;
	}

	public void setLasHaciendas(List<RebHacienda> lasHaciendas) {
		this.lasHaciendas = lasHaciendas;
	}

	public List<RebVariedadDeCana> getLasVDC() {
		return lasVDC;
	}

	public void setLasVDC(List<RebVariedadDeCana> lasVDC) {
		this.lasVDC = lasVDC;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	/**
	 * A special type of JSF DataModel to allow a datatable and datapaginator
	 * to page through a large set of data without having to hold the entire
	 * set of data in memory at once.
	 * Any time a managed bean wants to avoid holding an entire dataset,
	 * the managed bean declares this inner class which extends PagedListDataModel
	 * and implements the fetchData method. fetchData is called
	 * as needed when the table requires data that isn't available in the
	 * current data page held by this object.
	 * This requires the managed bean (and in general the business
	 * method that the managed bean uses) to provide the data wrapped in
	 * a DataPage object that provides info on the full size of the dataset.
	 */
	private class LocalDataModel extends PagedListDataModel {
		public LocalDataModel(int pageSize) {
			super(pageSize);
		}

		public DataPage<RebSuerte> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPage(startRow, pageSize);
		}
	}

	private class LocalDataModelDTO extends PagedListDataModel {
		public LocalDataModelDTO(int pageSize) {
			super(pageSize);
		}

		public DataPage<RebSuerteDTO> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPageDTO(startRow, pageSize);
		}
	}
}
